From time to time, system errors occur due to unavailable, for instance faulty or missing, hardware functionality. For example, when a computing device is sold that contains one or more microprocessors that, although capable of executing most instructions, were incorrectly fabricated such that various discrete functionalities cannot be supported, various errors can occur when those discrete functionalities are called upon by software.
Traditionally, such problems have been remedied by either replacing (or providing) the faulty (or missing) hardware, or by rewriting software intended for the hardware such that the software does not require the faulty or missing functionality. Neither of these solutions is particularly attractive. As for the first, replacing defective hardware is expensive for the hardware manufacturer in that the new hardware must be produced, possibly with new machinery and/or processes and, where faulty hardware was sold, the manufacturer may also have to absorb the cost of replacing the faulty hardware both in terms of the cost of the new hardware and the labor involved with its installation. As for the user, i.e., the customer, having to replace faulty hardware can be frustrating and, where a computing device is to be surrendered to have the problem remedied, can interfere with productivity.
Rewriting software for faulty or missing hardware functionality is both time-consuming and expensive and typically requires recompiling, relinking, and restarting of the software image. Such a task can be particularly difficult where the hardware problem is discovered late after much software (e.g., many applications) has already been developed for the hardware. As with the hardware replacement scenario, having to install replacement software can be frustrating to the customer. Although faulty or missing hardware functionality can normally be circumvented by rewriting only a portion of the software, e.g., in the form of a patch, such patches are static, i.e., are developed off-line and require computing system operation to be interrupted for purposes of installation.
From the foregoing, it can be appreciated that it would be desirable to have a system and method for patching code such that faulty or missing hardware functionality can be replaced dynamically without interrupting operation.